2023/12/231442字符

结构体

package main

import "fmt"

func main() {
    car1 := Car{
        name: "BWM",
        length: 3.2,
        color: "white",
    }
    fmt.Println(car1)  //--> {BWM 0 3.2 white}

    car2 := Car{ "Benz", 1, 3.3, "black" }
    fmt.Println(car2)  //--> {Benz 1 3.3 black}
}

type Car struct {
    name string
    age int
    length float32
    color string
}

匿名结构体

package main

import "fmt"

func main() {
    car1 := struct {
        name string
        color string
    }{
        name: "BWM",
        color: "white",
    }
    
    fmt.Println(car1)  //--> {BWM white}
}

内存分析

package main

import "fmt"

func main() {
    car1 := Car{
        name: "BWM",
        color: "white",
    }
    
    car2 := car1  // 深拷贝
    car2.name = "Benz"
    fmt.Println(car1, car2)  //--> {BWM white} {Benz white}
}

type Car struct {
    name string
    color string
}

结构体嵌套

package main

import "fmt"

func main() {
    dog := Dog{
        animal: Animal{ name: "小黑", age: 2 },
        like: "骨头",
    }
    
    fmt.Println(dog)  //--> {{小黑 2} 骨头}
}

type Animal struct {
    name string
    age int
}

type Dog struct {
    animal Animal
    like string
}

引用传递

package main

import "fmt"

func main() {
    animal := Animal{ name: "小黑", age: 2 }
    dog := Dog{ animal: &animal, like: "骨头" }
    
    dog.animal.age = 3
    fmt.Println(animal)  //--> {小黑 3}
}

type Animal struct {
    name string
    age int
}

type Dog struct {
    animal *Animal
    like string
}